$Description$
给你一个$1$到$n$的排列,你需要判断该排列内部是否存在一个$3$个元素的子序列(可以不连续),使得这个子序列是等差序列。
$Solution$
思路一$:bitset$优化暴力
枚举中间的数$,$判断一下这个数的对称的两侧$,$如果一侧的数出现了但是另一侧的没出现。那么一定存在一个可行方案
思路二$:$线段树维护$hash$值
从左到右,设当前数$w_j$为中间那一个,那么有以下两种情况
显然对于$l\sim j$与$r\sim j$如果有一位不相等(也就是它们的值不相等)那么就成立,因为一个在前面出现过了,另一个在后面还没出现过。
如上图中我们假设$c_a,c_b$不相等$($设$c_a=1,c_b=0)$,那么$a$在$w_j$之前就出现过$($即原序列中在$w_j$前$),$而$b$在$w_j$之后出现$($即原序列中在$w_j$后$)$。
$Code$
$bitset$优化暴力
1 |
|
线段树维护$hash$值
1 |
|